/*
 * @lc app=leetcode.cn id=190 lang=javascript
 *
 * [190] 颠倒二进制位
 */

// @lc code=start
/**
 * @param {number} n - a positive integer
 * @return {number} - a positive integer
 */
var reverseBits = function(n) {
  let rev = 0;
  for (let i = 0; i < 32 && n > 0; ++i) {
    // n & 1 是为了取出十进制整型最后一位二进制表示数
    // << 31 - i 左移31 - i是为了颠倒顺序
    // rev |= 是最终结果缓存，或一个二进制数可以实现类似十进制和二进制加法运算的感觉。
    rev |= (n & 1) << (31 - i);

    // 整体无符号右移一位，相当于一位完成运算，这样计算的永远是最后一位
    n >>>= 1;
  }
  // 不只是将非数字转换为数字，而是将它们转换为可以表示为32位无符号整数的数字。
  return rev >>> 0;
};
// @lc code=end

